/**
 * @file monstre.h
 * Definit les caracteristiques des monstres.
 */
#ifndef _MONSTRE_H
#define _MONSTRE_H
#include <iostream>
#include "terrain.h"
using namespace std;

/**
* /struct Structure monstre
*/
struct monstre
{
    int num;///@param num entier numéro du monstre
    char direction;///@param direction caractère sens dans lequel le monstre bouge (verticalement ou horizontalement en commençant par la droite, la gauche, le haut ou le bas)
    int type;///@param type entier pour l'image du monstre (dès fois que la graphiste ait quarante douze idées de monstres -_-")
    int x;///@param x entier position en x
    int y;///@param y entier position en y
    int niv;///@param niv entier niveau sur lequel se trouve le monstre
    int ter;///@param ter entier terrain sur lequel il se trouve
    int vie;///@param vie entier nombre de PV du monstre
};

/**
@brief crée un monstre
@param entiers num type x y niv ter, caratère dir
@return pointeur sur monstre
*/
monstre* creerMonstre(int num,char dir,int type,int x,int y,int niv,int ter,int vie);

/**
@brief initialise le monstre
@param monstre* mon, entiers num type x y niv ter, caratère dir
@return none
*/
void initMonstre(monstre* mon,int num,char dir,int type,int x,int y,int niv,int ter,int vie);

/**
@brief supprime un monstre
@param monstre* mon
@return none
*/
void supprimeMonstre(monstre* mon);

/**
@brief affiche un monstre
@param monstre* mon
@return none
*/
void afficheMonstre(monstre* mon);

/**
@brief recupère le numéro du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetNum(const monstre* mon);

/**
@brief récupère la "direction" du monstre
@param monstre* constante mon
@return caractère
*/
char monstreGetDirection(const monstre* mon);

/**
@brief récupère le type du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetType(const monstre* mon);

/**
@brief récupère la position en x du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetX(const monstre* mon);

/**
@brief récupère la position en y du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetY(const monstre* mon);

/**
@brief récupère le niveau du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetNiv(const monstre* mon);

/**
@brief récupère le numéro du terrain sur lequel sur trouve le monstre
@param monstre* constante mon
@return entier
*/
int monstreGetTer(const monstre* mon);


/**
@brief récupère le nombre de points de vie du monstre
@param monstre* constante mon
@return entier
*/
int monstreGetVie(const monstre* mon);

/**
@brief modifie le numéro du monstre
@param monstre* mon, entier num
@return none
*/
void monstreSetNum(monstre* mon, int num);

/**
@brief modifie la direction du monstre
@param monstre* mon, caractère dir
@return none
*/
void monstreSetDirection(monstre* mon, char dir);

/**
@brief modifie le type du monstre
@param monstre* mon, entier type
@return none
*/
void monstreSetType(monstre* mon, int type);

/**
@brief modifie la position en x du monstre
@param monstre* mon, entier x
@return none
*/
void monstreSetX(monstre* mon, int x);

/**
@brief modifie la position en y du monstre
@param monstre* mon, entier y
@return none
*/
void monstreSetY(monstre* mon, int y);

/**
@brief modifie le numéro du niveau sur lequel se trouve le monstre
@param monstre* mon, entier niv
@return none
*/
void monstreSetNiv(monstre* mon, int niv);

/**
@brief modifie le numéro du terrain sur lequel se trouve le monstre
@param monstre* mon, entier ter
@return none
*/
void monstreSetTer(monstre* mon, int ter);

/**
@brief modifie le nombre de points de vie du monstre
@param monstre* mon, entier vie
@return none
*/
void monstreSetVie(monstre* mon, int vie);

/**
@brief déplace en automatique le monstre (en fonction de sa "direction")
@param monstre* mon,
@return none
*/
void deplacementMonstre(monstre* mon,const Terrain* ter);

#endif
